﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;

namespace Btssio.Sport.Dal
{
    public class PersistanceBinaire
    {       
        /// <summary>
        /// Retourne une collection List de Sport initialisée à partir
        /// du fichier dont le nom complet est reçu en paramètre.
        /// </summary>
        /// <param name="pathFichier">Nom du fichier à désérialiser dans la collection retournée. 
        /// Si aucun chemin n'est précisé dans le nom du fichier ce dernier est recherché dans le 
        /// répertoire de l'exécutable de l'application</param>
        /// <returns>List des sports désérialisés depuis le fichier. 
        /// La collection est vide si le fichier n'a pas pu être désérialisé.</returns>
        public static List<Sport> deserialiseLesSports(string pathFichier)
        {
            List<Sport> lesSports = new List<Sport>();
            IFormatter fmt = new BinaryFormatter();
            if (File.Exists(pathFichier))
            {
                Stream ficIn = null;
                try
                {
                    ficIn = new FileStream(pathFichier, FileMode.Open, FileAccess.Read);
                    lesSports = (List<Sport>)fmt.Deserialize(ficIn);
                }
                catch
                {
                }
                finally
                {
                    ficIn.Close();
                }
            }
            return lesSports;
        }

        /// <summary>
        /// Sérialise en binaire une collection List de Sport dans un fichier 
        /// dont le nom complet est reçu en paramètre.
        /// </summary>
        /// <param name="pathFichier">Nom complet du fichier. 
        /// Si aucun chemin n'est précisé dans le nom du fichier ce dernier est enregistré dans le 
        /// répertoire de l'exécutable de l'application</param>
        /// <param name="lesComptes">Liste des sports à sérialiser</param>
        /// <returns>Indique si la sérialisation a pu avoir lieu ou non</returns>
        public static bool serialiseLesSports(string pathFichier, List<Sport> lesSports)
        {
            bool isSerialisationOK = false;
            if (lesSports != null)
            {
                IFormatter fmt = new BinaryFormatter();
                Stream ficOut = null;
                try
                {
                    ficOut = new FileStream(pathFichier, FileMode.Create, FileAccess.Write);
                    fmt.Serialize(ficOut, lesSports);
                    isSerialisationOK = true;
                }
                catch
                {
                }
                finally
                {
                    ficOut.Close();
                }
            }
            return isSerialisationOK;

        }
    }
}
